package br.com.os2.pacemark.gui;

import br.com.os2.pacemark.dao.HospitalDAO;
import br.com.os2.pacemark.dao.ImplanteDAO;
import br.com.os2.pacemark.dao.IndicacaoClinicaDAO;
import br.com.os2.pacemark.dao.MedicoDAO;
import br.com.os2.pacemark.dao.PacienteDAO;
import br.com.os2.pacemark.model.Hospital;
import br.com.os2.pacemark.model.Implante;
import br.com.os2.pacemark.model.IndicacaoClinica;
import br.com.os2.pacemark.model.Medico;
import br.com.os2.pacemark.model.Paciente;
import br.com.os2.pacemark.util.DateUtil;
import br.com.os2.pacemark.util.Mensagem;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;

/**
 * Classe que representa a tela de adição e edição de Implantes.
 * 
 * @author Daniel
 * 
 */
public class ImplanteView extends javax.swing.JDialog {
    
    /**
     * Variável implante utilizada para inserir ou editar convênios
     *
     */
    private Implante implante;

    /**
     * Variável usada para operações relacionadas oa banco de dados
     *
     */
    private ImplanteDAO implanteDAO;

    /**
     * Variável usada para indicar se a operação a ser realizada é uma inclusão
     * ou edição
     *
     */
    private String operacao;

    /**
     * Variável que referecia ao objeto/janela pai do JDialog atual
     *
     */
    private Implantes telaPai;

    /**
     * Construtor de Implante
     *
     * @param telaPai Janela pai do JDialog atual
     *
     * @param modal boolean que indica se a tela é ou não modal
     *
     * @param implante Implante para incluir ou editar
     *
     * @param operacao String que indica se a operação a ser realizada é uma
     * inclusão ou edição
     *
     *
     */
    public ImplanteView(Implantes telaPai, boolean modal,
                        Implante implante, String operacao) {

        super(telaPai, true);

        initComponents();

        this.telaPai = telaPai;

        this.implante = implante;

        this.operacao = operacao;

        init();

    }

    /**
     * Método para inicializar informaçoes do combobox de Estado
     *
     */
    public void init() {

        implanteDAO = new ImplanteDAO();

        //Inicializando combobox's
        DefaultComboBoxModel modelPacientes = new DefaultComboBoxModel(new PacienteDAO().listar().toArray());
        
        DefaultComboBoxModel modelMedicos = new DefaultComboBoxModel(new MedicoDAO().listar().toArray());
        
        DefaultComboBoxModel modelHospitais = new DefaultComboBoxModel(new HospitalDAO().listar().toArray());
        
        DefaultComboBoxModel modelIndicacoes = new DefaultComboBoxModel(new IndicacaoClinicaDAO().listar().toArray());
        
        cmbPacientes.setModel(modelPacientes);
        
        cmbMedicos.setModel(modelMedicos);
        
        cmbHospitais.setModel(modelHospitais);
        
        cmbIndicacoesClinicas.setModel(modelIndicacoes);
        
        /**
         * Caso seja uma inserção, inicializa as variáveis que são objetos
         */
        if (operacao.equals("ADD")) {

            implante.setPaciente(new Paciente());
            implante.setHospital(new Hospital());
            implante.setMedico(new Medico());
            implante.setIndicacaoClinica(new IndicacaoClinica());

        }

        /**
         * Caso seja uma alteração, preenche as informações
         */
        if (operacao.equals("EDIT")) {

            peencherInformacoes();

        }

    }

    /**
     * Método para preencher informações no formulário.
     *
     * Esse método é usado no início da alteração dos dados, para preencher as
     * informações que podem ser alteradas/editadas.
     *
     *
     */
    public void peencherInformacoes() {

        txtData.setText(DateUtil.format(implante.getData()));

        cmbPacientes.setSelectedItem(implante.getPaciente());

        cmbMedicos.setSelectedItem(implante.getMedico());

        cmbHospitais.setSelectedItem(implante.getHospital());

        cmbIndicacoesClinicas.setSelectedItem(implante.getIndicacaoClinica());

    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        cmbPacientes = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        cmbMedicos = new javax.swing.JComboBox();
        cmbIndicacoesClinicas = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        cmbHospitais = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        txtData = new javax.swing.JFormattedTextField();
        btnGravar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabel1.setText("Paciente*");

        cmbPacientes.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel2.setText("Médico*");

        cmbMedicos.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        cmbIndicacoesClinicas.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel3.setText("Indicação Clinica");

        cmbHospitais.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel4.setText("Hospital");

        jLabel5.setText("Data Implante*");

        try {
            txtData.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        btnGravar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/gravar.png"))); // NOI18N
        btnGravar.setText("Gravar");
        btnGravar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGravarActionPerformed(evt);
            }
        });

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagens/cancelar.png"))); // NOI18N
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnGravar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(cmbHospitais, javax.swing.GroupLayout.Alignment.LEADING, 0, 378, Short.MAX_VALUE)
                        .addComponent(cmbMedicos, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(cmbIndicacoesClinicas, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(txtData, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(cmbPacientes, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addContainerGap(23, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtData, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(cmbPacientes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbIndicacoesClinicas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbMedicos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbHospitais, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnGravar))
                .addGap(24, 24, 24))
        );

        setSize(new java.awt.Dimension(427, 340));
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void btnGravarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGravarActionPerformed

       /**
        * Informa ao usuário se há campos obrigatórios vazios
        */
        if (txtData.getText().isEmpty()) {

            Mensagem.novaMensagem("Campos obrigatórios vazios",
                                  "Campos marcados com * são obrigatórios",
                                  JOptionPane.WARNING_MESSAGE);

        } else {
            
            implante.setData(DateUtil.parse(txtData.getText()));
            
            implante.setPaciente((Paciente)cmbPacientes.getSelectedItem());
            
            implante.setHospital((Hospital)cmbHospitais.getSelectedItem());
            
            implante.setMedico((Medico)cmbMedicos.getSelectedItem());
            
            implante.setIndicacaoClinica((IndicacaoClinica)cmbIndicacoesClinicas.getSelectedItem());

            if (operacao.equals("ADD")) {
                
                implanteDAO.inserir(implante);

            } else {

                implanteDAO.atualizar(implante);

            }

            telaPai.listar(implanteDAO.listar());

            dispose();

        }
    }//GEN-LAST:event_btnGravarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed

        dispose();
        
    }//GEN-LAST:event_btnCancelarActionPerformed
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnGravar;
    private javax.swing.JComboBox cmbHospitais;
    private javax.swing.JComboBox cmbIndicacoesClinicas;
    private javax.swing.JComboBox cmbMedicos;
    private javax.swing.JComboBox cmbPacientes;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JFormattedTextField txtData;
    // End of variables declaration//GEN-END:variables

}
